package tech.aistar.day02;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;

/**
 * 本类用来演示: bean的后置处理器 - 对容器中所有的bean进行初始化方法前后的额外处理
 *
 * @author: success
 * @date: 2021/5/7 9:20 上午
 */
public class MyBeansProccessor implements BeanPostProcessor {
    /**
     * 引入了Bean的后置处理器之后BeanPostProccessor
     *
     *
     * init方法之前执行
     * @param bean 当前正在处理的ioc容器中的bean
     * @param beanName bean标签的id属性的值
     * @return
     * @throws BeansException
     */
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        //虽然是对所有的bean进行init初始化方法前后的额外处理
        //但是可以在此处进行针对某个bean进行单一处理
        if("beans".equals(beanName)) {
            System.out.println("bean:before");
            Beans beans= (Beans) bean;
            beans.setName("奶茶妹妹");
        }
        return bean;
    }

    /**
     * init方法之后执行
     * @param bean
     * @param beanName
     * @return
     * @throws BeansException
     */
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
//        if("beans".equals(beanName)) {
//            System.out.println("bean:after");
//        }

        //此处可以返回一个新的bean
        Beans newBean = new Beans();
        newBean.setName("小强");
        return newBean;
    }
}
